我们正在突破线性模型的局限,这些模型难以对无法用直线分离的数据进行分类。今天,我们将使用 PyTorch 工作流构建一个 深度神经网络(DNN) 能够学习 复杂且非线性的决策边界 对真实世界分类任务至关重要。
1. 可视化非线性数据的必要性
我们的第一步是创建一个具有挑战性的合成数据集,例如双月分布,以直观展示为何简单线性模型会失效。这种设置迫使我们使用深层架构来逼近类间分隔所需的复杂曲线。
数据属性
- 数据结构: 合成数据特征(例如,1000个样本,每样本2个特征,即 $1000 \times 2$)。
- 输出类型: 单一的概率值,通常为
torch.float32,表示类别归属。 - 目标: 通过逐层计算创建一个 弯曲的决策边界 以实现非线性建模。
非线性激活函数的力量
深度神经网络的核心原理是通过 ReLU 等函数在隐藏层中引入非线性。
ReLU 如果没有这些非线性激活函数,无论层数多深,堆叠层最终都只会等效于一个大型线性模型。
终端bash — classification-env
> 准备就绪。点击“运行”以执行。
>
张量检查器实时
运行代码以检查活跃的张量
问题 1
ReLU 激活函数在隐藏层中的主要作用是什么?
问题 2
二分类任务中,输出层所需的激活函数是 输出 层?
问题 3
使用 Sigmoid 输出的二分类问题对应的损失函数是哪一个?
挑战:设计核心架构
整合架构组件以实现非线性学习。
你必须为双月任务构建一个
nn.Module。输入特征:2。输出类别:1(概率)。
步骤 1
描述该 DNN 中单个隐藏层的计算流程。
解答:
输入 $\to$ 线性层(权重矩阵)$\to$ ReLU 激活 $\to$ 输出至下一层。
输入 $\to$ 线性层(权重矩阵)$\to$ ReLU 激活 $\to$ 输出至下一层。
步骤 2
如果输入形状为 $(N, 2)$ 且使用 BCE 损失,最终层的大小应为多少?
解答:
输出层必须为 $(N, 1)$ 的大小,以便每个样本生成一个概率分数,与标签形状匹配。
输出层必须为 $(N, 1)$ 的大小,以便每个样本生成一个概率分数,与标签形状匹配。